Repository navigation
Fix: sonde detresse hote -- wslpath + resolution powershell sous PATH systemd (supervise.sh) - #16539
Conversation
… systemd (supervise.sh) La garde de detresse (#15123) rendait systematiquement « hote NON MESURABLE » depuis un contexte systemd : (1) bash sous WSL ne resout pas cygpath.exe sans suffixe, donc le repli passait le chemin POSIX a powershell.exe -File ; (2) le contexte systemd n'herite pas du PATH Windows annexe, donc powershell.exe lui-meme etait introuvable. Resolution par wslpath (natif WSL) avec repli cygpath, et powershell.exe resolu via wslpath en absolu quand absent du PATH. Valide empiriquement : les trois services coursia-* refusent au demarrage sans ce fix et demarrent avec (sonde mesurant total 18432 Mo / budget 12288 Mo sur po-2024, 2026-09-17). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
Trivial-diff advisory (#15740, non bloquant). |
Bash Syntax Advisory — shebang / executable-bit warningsSee the |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] structural review — 1 fichier (scripts/ci/docker/linux-runner/supervise.sh, 1 925 l.), +11/−3 ; lu en fenêtres ciblées au head 2b564619 (l.1-20, l.455-530 + greps structure host_probe/NON MESURABLE) — contenu, pas de patch.
VERDICT: LGTM (vérifié : chaîne fail-closed tracée de bout en bout au head + sonde .ps1 présente)
Vérifié :
- Scope exact et borné : la zone l.474-486 porte les 2 causes du body — (1) résolution 3-étages de
powershell.exe:command -v→wslpath 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'(absolu — contourne le PATH Windows non hérité du contexte systemd) →return 0; (2) conversion Windows du-File:wslpath -w "$PROBE_PS1"→cygpath -w(repli Git-Bash/Cygwin) →echoPOSIX en dernier recours. Correspond trait pour trait aux 2 causes mesurées annoncées. - Fail-closed INTACT (la partie qui compte pour une garde) : sonde vide → l.534/541 « hote NON MESURABLE »
return 2→ l.641 REFUS → l.681autorend 0 en détresse OU non mesurable. Le fix rend la sonde joignable ; il ne touche pas la sémantique de refus — la garde ne peut que devenir plus contraignante (sortie du non-mesurable vers la vraie mesure), jamais plus permissive. persist/host-distress-probe.ps1présent au head (5 017 octets) — le garde[ -f "$PROBE_PS1" ](l.483) n'est pas un garde mort.- L'échappatoire opérateur (l.466-473, déclaration explicite
COURSIA_RUNNER_HOST_PROBE) est inchangée et garde son contrôle positif_PROBE_2— le différentielMappedreste éprouvable. - Aucun secret dans la zone (chemins système uniquement) — scan CLEAN.
- Claims de terrain (
command -v cygpath→ 127 sous WSL, PATH systemd) : mesurés côté po-2024 le 17/09, non re-jouables depuis ce siège = SUPPOSÉ — mais datés, spécifiques, cohérents avec l'activité du jour sur cette machine.
Observation (non bloquante) : l.485 — le repli terminal echo "$PROBE_PS1" repasse le chemin POSIX à powershell.exe, i.e. exactement la cause n°1 que ce fix répare. Il n'atterrit que si ni wslpath ni cygpath n'existent, auquel cas la mesure échouera en amont (NON MESURABLE → REFUS — pas de faux vert possible). Défendable comme « meilleure tentative » ; à garder en tête si un NON MESURABLE réapparaît sur un hôte sans les deux convertisseurs.
Non vérifié : l'advisory bot « shebang / executable-bit » (14:12:50Z) — shebang présent (l.1) ; le bit exécutable n'est pas lisible via l'API contents depuis ce siège (mode absent de la réponse). Non bloquant, le script était déjà en service avant ce fix.
Pas d'action attendue : fix guard chirurgical, direction conservatrice correcte.
|
[REPAIR-STATE] Lane po-2024 — le FAIL « Scripts Tests (CPU) » (run 35230109774, 14:03→14:12Z) est la pathologie xdist #16288 (fleet-wide, OPEN), pas un défaut de cette branche : watchdog mesure |
Path-collision (organ #13359/#13615)Cette PR #16539 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
Grain: MED/guard — lane myia-po-2024:CoursIA — prev: MED/notebook-python #16054
Réparation : la sonde de détresse hôte rendait « NON MESURABLE » sous systemd
Le superviseur de runners (
scripts/ci/docker/linux-runner/supervise.sh) refusait tout démarrage depuis le passage de la garde #15123 en contexte service, par deux causes distinctes et mesurées sur po-2024 ce 2026-09-17 :cygpathest intraçable sous WSL : bash ne résout pascygpath.exesans suffixe (command -v cygpath→ 127 mesuré). Le repli de la ligne 477 passait donc le chemin POSIX (/mnt/d/...) àpowershell.exe -File, qui échoue silencieusement → sonde vide → « hôte NON MESURABLE -- REFUS ».env -i PATH=/usr/local/sbin:... bash -c 'command -v powershell.exe'→ introuvable, alors qu'il résout en session login). La sonde était vide même avec un chemin converti correct.Fix (11 +/3 −, un seul hunk dans
host_probe)-Filereçoitwslpath -w "$PROBE_PS1"(natif WSL, mesuré :/mnt/d/...→D:\Dev\...), replicygpath -wpour les contextes Cygwin/Git-Bash.powershell.exeest résolu :command -vd'abord, sinonwslpath 'C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe'en absolu (exécutable directement même sans PATH Windows).Validation (empirique, sur la machine réelle)
coursia-*(runner/lean/waiters) de po-2024 crash-loopaient surERREUR: [garde] hote NON MESURABLE (sonde injoignable)— toute la flotte CI Linux de la machine était hors ligne (jobs Lean CI morts sans log, ex. feat(lean,#2874): Alexander 11n102 DISCHARGED (FR+EN) -- 34 transvections intégrales #16496 run 35175031202).systemctl restart coursia-runner→ la garde mesure (total 18432 Mo,budget 12288 Mo) et passe ; les 3 services actifs, 22 slots conteneurs lancés, runnersmyia-po-2024-linux-docker-*enregistrés online côté GitHub (mesuré viagh api .../actions/runners).bash -nOK ; aucun test dédié n'existe poursupervise.sh(bash, pas de harnais) — la preuve est le redémarrage réel des services ci-dessus.Contexte (pour la review)
Post-migration C: → D: du 2026-09-17, les services systemd WSL pointaient encore sur
/mnt/c/dev/CoursIA(purge C: faite) — repointés vers/mnt/d/Dev/CoursIAdans/usr/local/bin/coursia-*-start.sh(machine-local, hors dépôt). Ce PR couvre le défaut repo-side restant : la sonde ne fonctionnait dans AUCUN contexte systemd WSL, indépendamment du chemin. Défaillance concomitante non couverte ici (hors dépôt) : l'idle-terminate de la VM WSL quand plus aucune session ne la tient — keeper installé côté machine (tâche planifiéeCoursIA-wsl-keeper).See #15123 (garde d'origine) · See #16288 (pathologie xdist concomitante, non liée).
🤖 Generated with Claude Code